home *** CD-ROM | disk | FTP | other *** search
/ Power CD / Power CD ATARI-Rechner Lieben.iso / UTILITY / MAXIDISK / COPY.C next >
Encoding:
C/C++ Source or Header  |  1993-10-09  |  3.0 KB  |  107 lines

  1. /* 16.5.86  Max Böhm */
  2.  
  3. /* Dieses Programm kopiert den Inhalt des "Source"-Directory    */
  4. /* in das "Dest"-Directory.                                     */
  5. /* Die beiden Directorys können als Parameter angegeben werden. */
  6. /* Defaultwerte sind A:\COPY und D:                             */
  7.  
  8. #include <osbind.h>
  9. #include <string.h>
  10.  
  11. long buffer, buf_size;
  12.  
  13. char source[100]="A:\\COPY";
  14. char dest[100]="D:";
  15.  
  16. copy_dir ()       /* source und dest sind global; bei Fehler: return (1) */
  17. {
  18. int source_len, dest_len, fd_source, fd_dest, error;
  19. char dta[44];
  20. long old_dta, fail, size, count;
  21.    error=0;
  22.    source_len=strlen(source);
  23.    dest_len=strlen(dest);
  24.    old_dta=Fgetdta();
  25.    Fsetdta(dta);
  26.    strcat(source,"\\*.*");
  27.    fail=Fsfirst(source,16);
  28.    source[source_len]=0;
  29.    while (!fail)
  30.    {  strcat(source,"\\");
  31.       strcat(source,dta+30);
  32.       strcat(dest,"\\");
  33.       strcat(dest,dta+30);
  34.       if (dta[21]==16)         /* Directory */
  35.       {  if (strcmp(dta+30,".")&&strcmp(dta+30,".."))
  36.             if (Dcreate(dest))
  37.             {  printf("Ordner %s läßt sich nicht anlegen.\n",dest);
  38.                error=1;
  39.             }
  40.             else
  41.                error|=copy_dir(source,dest);
  42.       }
  43.       else                     /* File */
  44.       {  printf("%s  nach  %s\n",source,dest);
  45.          if ((fd_source=Fopen(source,0))<0)
  46.          {  printf("Datei %s läßt sich nicht öffnen.\n",source);
  47.             error=1;
  48.          }
  49.          else
  50.             if ((fd_dest=Fcreate(dest,dta[21]&~1))<0)
  51.             {  printf("Datei %s läßt sich nicht einrichten.\n",dest);
  52.                error=1;
  53.             }
  54.             else
  55.             {  size=*(long*)(dta+26);
  56.                while (size)
  57.                {  count=(size<buf_size)?size:buf_size;
  58.                   size-=count;
  59.                   if (Fread(fd_source,count,buffer)!=count)
  60.                   {  printf("Fehler beim Lesen von %s .\n",source);
  61.                      error=1;
  62.                      break;
  63.                   }
  64.                   if (Fwrite(fd_dest,count,buffer)!=count)
  65.                   {  printf("Fehler beim Schreiben von %s .\n",dest);
  66.                      error=1;
  67.                      break;
  68.                   }
  69.                }
  70.                Fclose(fd_source);
  71.                Fclose(fd_dest);
  72.                fd_dest=Fopen(dest,1);
  73.                Fdatime(fd_dest,dta+22,1);
  74.                Fclose(fd_dest);
  75.             }
  76.       }
  77.       source[source_len]=0;
  78.       dest[dest_len]=0;
  79.       fail=Fsnext();
  80.    }
  81.    if (fail!=-49l)
  82.    {  printf("Ordner %s nicht gefunden.\n",source);
  83.       error=1;
  84.    }
  85.    Fsetdta(old_dta);
  86.    return (error);
  87. }
  88.  
  89. main(argc,argv)
  90. int argc;
  91. char *argv[];
  92. {
  93.    if (argc>=1)
  94.       strcpy(source,argv[1]);
  95.    if (argc>=2)
  96.       strcpy(dest,argv[2]);
  97.    if (dest[2])
  98.       Dcreate(dest);
  99.    buf_size=Malloc(-1l);
  100.    buffer=Malloc(buf_size);
  101.    if (copy_dir())
  102.    {  printf("\nWeiter mit Return.\n");
  103.       Cconin();
  104.    }
  105.    Mfree(buffer);
  106. }
  107.